Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[gh-117657] _Py_MergeZeroLocalRefcount isn't loading ob_ref_shared with strong enough semantics #118111

Merged
merged 1 commit into from
Apr 19, 2024

Conversation

DinoV
Copy link
Contributor

@DinoV DinoV commented Apr 19, 2024

In the nogil-integration branch there's some intermittent TSAN warnings like these:

https://gist.github.com/DinoV/52b7131cb149b9ebb2e965970c4ae9e8

It looks like we're racing on the loading of ob_ref_shared in _Py_MergeZeroLocalRefcount because we're doing a relaxed load, leading to the object potentially being freed while another thread holds a reference to it. This is occurring because with a lock-free read from the inline values there's no other synchronization points with the thread which owns the object.

This just changes the read to be acquire.

@mpage
Copy link
Contributor

mpage commented Apr 19, 2024

This looks right to me but it'd be good to have @colesbury take a look as well.

@mpage mpage requested a review from colesbury April 19, 2024 19:36
@DinoV DinoV merged commit b45af00 into python:main Apr 19, 2024
39 checks passed
@DinoV DinoV deleted the nogil_tsan_decref branch May 31, 2024 18:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants